/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;


import dominio.Acta;
import java.util.Collection;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.swing.JOptionPane;

/**
 *
 * @author eagle
 */
public class ActaDao {


    private EntityManager em;

   public ActaDao(EntityManager em) {
        this.em = em;
    }

    public ActaDao() {
        
    }


    public Acta crearActa( int documento_iddocumento,
           String ciudad, String sesion, String ordenDia, String desarrolloDia,
           String compromisos, String convocatoria, String miembros, String ordenDia1,
           String desarrolloDia1) {
        Acta a = new Acta( documento_iddocumento, ciudad, sesion,
                ordenDia, desarrolloDia, compromisos, convocatoria, miembros, ordenDia1,
                desarrolloDia1);
        em.persist(a);//con esta funcion lo guarda en la base de datos
        return a;
    }

    public Acta encontrarActa(Integer idacta) {
        return em.find(Acta.class, idacta);// con esta funcion se buscas un dato por primary key, el primer parametro es nuestra clase entidad
    }

     public Collection<Acta> encontrarActa() { //encontrar todos los usuarios
        Query query = em.createQuery("SELECT a FROM Acta a");// Ojo la sentencia está en Java Query Language, no SQL
        return (Collection<Acta>) query.getResultList(); // me guarda la lista de todos los usuarios en mi coleccion
    }

    public void borrarActa(Integer idacta) {
        Acta a = encontrarActa(idacta);//en este caso podemos borrar un usuario por nombre
        if (a != null) {//si no lo encuentra por supuesto no lo intenta borrar
         em.remove(a);// borra de la tabla ese registro
            }

    }

    public Acta actualizarActa(Integer idacta,
                int documento_iddocumento, String ciudad, String  sesion ,
                String ordenDia, String desarrolloDia, String compromisos, String Convocatoria,
                String miembros, String ordenDia1, String desarrolloDia1) {
        Acta a = em.find(Acta.class, idacta); //se usa el entity manager para encontrarlo luego cuando se llame ActualizarUsuario se hace commit y va a persistir el usuario actualizado
        if (a != null) {

            a.setIdacta(idacta);
            a.setDoc(documento_iddocumento);
            a.setciudad(ciudad);
            a.setsesion(sesion);
            a.setOrdenDia(ordenDia);
            a.setdesarrolloDia(desarrolloDia);
            a.setcompromisos(compromisos);
            a.setconvocatorio(Convocatoria);
            a.setmiembros(miembros);
            a.setOrdenDia1(ordenDia1);
            a.setDesarrolloDia1(desarrolloDia1);


           

        }
        return a;
    }

  public List<Acta> findAll() {
       Query query = em.createQuery("SELECT a FROM Acta a");
       return (List<Acta>) query.getResultList(); // me guarda la lista de todos los usuarios en mi coleccion
    }




  public List<Acta> encotrarTabla() {
       Query query = em.createQuery("select a.idacta, d.nombredoc, d.fecharealizacion " +
               " from acta as a inner join documento as d where a.documento_iddocumento = d.iddocumento");
       return (List<Acta>) query.getResultList(); // me guarda la lista de todos los usuarios en mi coleccion
    }

    public Acta ActualizarActa(Integer idacta) {
        em.getTransaction().begin();
        Acta e = this.encontrarActa(idacta);
        if (e != null) {
            e.setIdacta(idacta);
        }
        else {
            JOptionPane.showMessageDialog(null, "Error al actualizar Acta",
                    null, JOptionPane.ERROR_MESSAGE);
        }
        em.getTransaction().commit();
        return e;
    }

    public boolean crearActa (Object entidad){
        boolean flag=true;
        EntityManagerFactory  emf = Persistence.createEntityManagerFactory("SiaPersistencia");
        em = emf.createEntityManager();
        EntityTransaction trans = em.getTransaction();

        trans.begin();
        em.persist(entidad);
        trans.commit();

        return flag;

     }

     public int devolverId() {
        int i = 0;
        Query q = em.createQuery("SELECT a.idacta from Acta a ORDER BY a.idacta DESC LIMIT 1");
        if (q.getResultList().isEmpty() == true) {
            return 1;
        }
        else {
            i = (Integer) q.getResultList().get(0);
            return (i+1 );
        }
    }
}
